﻿using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using DevExpress.XtraEditors;
using prjKQXS_DLL;
using prjKQXS_DLL.Doanh_thu;
using prjKQXS_DLL.Hop_dong;

namespace prjKQXS_UI.View
{
    public partial class frmChuyenDuLieu : XtraForm
    {
        SqlConnection connClient = new SqlConnection(BienTc.connString);
        SqlConnection connServer = new SqlConnection(clsCommon.getServerConnectionString()); 
        
        DateTime Ngay;
        string MaDV = "%";
        string mode = "";

        /// <summary>
        /// 
        /// </summary>
        /// <param name="ngay"></param>
        /// <param name="MaDV">Truyền vào là % hoặc mã đơn vị tương ứng</param>
        /// <param name="dt"></param>
        public frmChuyenDuLieu(DateTime ngay, char MaDV)
        {
            InitializeComponent();

            this.Ngay = ngay;
            this.MaDV = MaDV.ToString().Trim();
        }

        string madonvi = "";
        public frmChuyenDuLieu(DateTime Ngay, string madonvi)
        {
            InitializeComponent();

            this.Ngay = Ngay;
            this.madonvi = madonvi;
            mode = "DMQUY";
        }

        private void frmChuyenDL_Shown(object sender, EventArgs e)
        {
            ChuyenDuLieu();
        }

        #region cls event --------------------------------------------
        private void cls_OnAction(SqlException e)
        {
            cls_OnError(e);
        }

        private void cls_OnError(Exception e)
        {
            XtraMessageBox.Show("Một lỗi chưa được xử lý đã xảy ra. Chi tiết lỗi: \n" + e.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
            this.Close();
        }
        #endregion ---------------------------------------------------

        private void Chuyen_DMQUY()
        {
            txt.AppendText("\r\nBắt đầu chuyển dữ liệu nhật ký quỹ.....");

            string sql = @" SELECT * 
                            FROM DMQUY
                            WHERE Ngay = @Ngay 
                                and MaDV like @MaDV";
            SqlDataAdapter da = new SqlDataAdapter(sql, connClient);
            da.SelectCommand.Parameters.AddWithValue("@Ngay", Ngay.Date);
            da.SelectCommand.Parameters.AddWithValue("@MaDV", MaDV);
            DataTable dtDMQUY = new DataTable();
            da.Fill(dtDMQUY);

            SqlCommand cmd;

            foreach (DataRow dr in dtDMQUY.Rows)
            {
                sql = "SELECT COUNT(ID) FROM DMQUY WHERE ID = @DMQuyID";
                cmd = new SqlCommand(sql, connServer);
                cmd.Parameters.AddWithValue("@DMQuyID", dr["ID"]);
                if (cmd.ExecuteScalar().ToString().Trim() == "0")
                {
                    sql = @"SET IDENTITY_INSERT KQXS_New.dbo.DMQUY ON
                            INSERT INTO DMQUY(ID, Ngay,Ngaychungtu,Madv,Sophieuthu,Sophieuchi,Noidung,Sotienthu,Sotienchi,Tonquy)
                            VALUES (@ID, @Ngay, @Ngaychungtu, @Madv, @Sophieuthu, @Sophieuchi, @Noidung, @Sotienthu, @Sotienchi, @Tonquy)";
                    cmd = new SqlCommand(sql, connServer);
                    cmd.Parameters.AddWithValue("@ID", dr["ID"]);
                    cmd.Parameters.AddWithValue("@Ngay", dr["Ngay"]);
                    cmd.Parameters.AddWithValue("@Ngaychungtu", dr["Ngaychungtu"]);
                    cmd.Parameters.AddWithValue("@Madv", dr["Madv"]);
                    cmd.Parameters.AddWithValue("@Sophieuthu", dr["Sophieuthu"]);
                    cmd.Parameters.AddWithValue("@Sophieuchi", dr["Sophieuchi"]);
                    cmd.Parameters.AddWithValue("@Noidung", dr["Noidung"]);
                    cmd.Parameters.AddWithValue("@Sotienthu", dr["Sotienthu"]);
                    cmd.Parameters.AddWithValue("@Sotienchi", dr["Sotienchi"]);
                    cmd.Parameters.AddWithValue("@Tonquy", dr["Tonquy"]);
                    cmd.ExecuteNonQuery();
                }
                else
                {
                    //cls.Update(dr, Ngay, true, connServer);
                    sql = @"UPDATE DMQUY
                            SET Ngay = @Ngay,
                                Ngaychungtu = @Ngaychungtu,
                                Madv = @Madv,
                                Sophieuthu = @Sophieuthu,
                                Sophieuchi = @Sophieuchi,
                                Noidung = @Noidung,
                                Sotienthu = @Sotienthu,
                                Sotienchi = @Sotienchi,
                                Tonquy = @Tonquy
                            WHERE ID = @ID";
                    cmd = new SqlCommand(sql, connServer);
                    cmd.Parameters.AddWithValue("@ID", dr["ID"]);
                    cmd.Parameters.AddWithValue("@Ngay", dr["Ngay"]);
                    cmd.Parameters.AddWithValue("@Ngaychungtu", dr["Ngaychungtu"]);
                    cmd.Parameters.AddWithValue("@Madv", dr["Madv"]);
                    cmd.Parameters.AddWithValue("@Sophieuthu", dr["Sophieuthu"]);
                    cmd.Parameters.AddWithValue("@Sophieuchi", dr["Sophieuchi"]);
                    cmd.Parameters.AddWithValue("@Noidung", dr["Noidung"]);
                    cmd.Parameters.AddWithValue("@Sotienthu", dr["Sotienthu"]);
                    cmd.Parameters.AddWithValue("@Sotienchi", dr["Sotienchi"]);
                    cmd.Parameters.AddWithValue("@Tonquy", dr["Tonquy"]);
                    cmd.ExecuteNonQuery();
                }
            }

            txt.AppendText("\r\nChuyển dữ liệu nhật ký quỹ thành công!");
        }

        private void Chuyen_DOANHTHU()
        {
            txt.AppendText("\r\nBắt đầu chuyển dữ liệu doanh thu.....");

            string sql = @" SELECT DT.* 
                                    FROM DOANHTHU DT
	                                    INNER JOIN vHOPDONG HD ON HD.ID = DT.HopDongID
	                                    INNER JOIN vDMCANBO CB ON CB.ID = HD.DMCanBoID
                                    WHERE Ngay = @Ngay 
                                        and CB.Ma_DMDonVi like @MaDV
                                        and DT.isPublic = 1";
            SqlDataAdapter da = new SqlDataAdapter(sql, connClient);
            da.SelectCommand.Parameters.AddWithValue("@Ngay", Ngay.Date);
            da.SelectCommand.Parameters.AddWithValue("@MaDV", MaDV);
            DataTable dtDOANHTHU = new DataTable();
            da.Fill(dtDOANHTHU);
            dtDOANHTHU.Columns["Truyen_Thong"].ColumnName = "TThong";

            SqlCommand cmd;
            clsDoanhThu cls = new clsDoanhThu();
            cls.OnAction += new clsDoanhThu.OnActionHandler(cls_OnAction);
            cls.OnError += new clsDoanhThu.OnErrorHandler(cls_OnError);

            foreach (DataRow dr in dtDOANHTHU.Rows)
            {
                sql = "SELECT COUNT(ID) FROM DOANHTHU WHERE HopDongID = @HopDongID and Ngay = @Ngay";
                cmd = new SqlCommand(sql, connServer);
                cmd.Parameters.AddWithValue("@HopDongID", dr["HopDongID"]);
                cmd.Parameters.AddWithValue("@Ngay", Ngay.Date);
                if (cmd.ExecuteScalar().ToString().Trim() == "0")
                    cls.Insert(dr, Ngay, true, connServer);
                else cls.Update(dr, Ngay, true, connServer);
            }

            txt.AppendText("\r\nChuyển dữ liệu doanh thu thành công!");
        }

        private void ChuyenDuLieu()
        {
            txt.AppendText("Đang kiểm tra kết nối đến máy chủ.....");
            connClient.Open();
            connServer.Open();

            if (connServer.State == ConnectionState.Open)
            {
                txt.AppendText("\r\nĐã kết nối tới máy chủ!");

                if (mode == "DMQUY")
                {
                    Chuyen_DMQUY();
                }
                else
                {
                    Chuyen_DOANHTHU();
                }
            }
            else
            {
                txt.AppendText("\r\nKết nối thất bại, kiểm tra lại đường truyền!");
            }
        }

        private void sbtnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}